package service

import (
	"context"
	menuApi "mldong/api/menu"
	rbacApi "mldong/api/rbac"
	userApi "mldong/api/user"
	"reflect"
)

type IRbacService interface {
	/**
	* 保存角色菜单关联
	 */
	SaveRoleMenu(ctx context.Context, params []rbacApi.RoleMenuParam) (res bool, err error)
	/**
	* 角色ID获取菜单ID集合
	 */
	RoleMenuIds(ctx context.Context, roleId string) (res []string, err error)
	/**
	* 获取某个用户的拥有菜单权限
	 */
	GetMenuIdsByUserId(ctx context.Context, userId string) (res []string, err error)
	/**
	* 获取某个用户的拥有角色ID集合
	 */
	GetRoleIdsByUserId(ctx context.Context, userId string) (res []string, err error)
	/**
	* 获取某个角色拥有菜单权限
	 */
	GetMenuCodesByRoleId(ctx context.Context, roleId string) (res []string, err error)
	/**
	* 角色ID获取菜单列表
	 */
	RoleMenuList(ctx context.Context, roleId string) (res []menuApi.MenuVO, err error)
	/**
	* 保存用户角色关联
	 */
	SaveUserRole(ctx context.Context, params []rbacApi.UserRoleParam) (res bool, err error)
	/**
	* 删除用户角色关联
	 */
	RemoveUserRole(ctx context.Context, params []rbacApi.UserRoleParam) (res bool, err error)
	/**
	* 角色ID获取用户列表
	 */
	UserListByRoleId(ctx context.Context, req *userApi.PageReq) (res userApi.UserPageVO, err error)
	/**
	* 获取用户列表-排除指定角色
	 */
	UserListExcludeRoleId(ctx context.Context, req *userApi.PageReq) (res userApi.UserPageVO, err error)
}

var RbacServiceType = reflect.TypeOf((*IRbacService)(nil)).Elem()
